acm_init_domain_ssid(domid_t id, ssidref_t ssidref)
{
struct acm_ssid_domain *ssid;
- struct domain *subj = get_domain_by_id(id);
+ struct domain *subj = rcu_lock_domain_by_id(id);
int ret1, ret2;
if (subj == NULL)
}
if ((ssid = xmalloc(struct acm_ssid_domain)) == NULL)
{
- put_domain(subj);
+ rcu_unlock_domain(subj);
return ACM_INIT_SSID_ERROR;
}
printk("%s: ERROR instantiating individual ssids for domain 0x%02x.\n",
__func__, subj->domain_id);
acm_free_domain_ssid(ssid);
- put_domain(subj);
+ rcu_unlock_domain(subj);
return ACM_INIT_SSID_ERROR;
}
printkd("%s: assigned domain %x the ssidref=%x.\n",
__func__, id, ssid->ssidref);
- put_domain(subj);
+ rcu_unlock_domain(subj);
return ACM_OK;
}
__func__, d->domain_id, i, sha_copy.flags, sha_copy.domid,
(unsigned long)sha_copy.frame);
rdomid = sha_copy.domid;
- if ((rdom = get_domain_by_id(rdomid)) == NULL) {
+ if ((rdom = rcu_lock_domain_by_id(rdomid)) == NULL) {
spin_unlock(&d->grant_table->lock);
printkd("%s: domain not found ERROR!\n", __func__);
goto out;
ste_rssid = GET_SSIDP(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY,
(struct acm_ssid_domain *)(rdom->ssid));
ste_rssidref = ste_rssid->ste_ssidref;
- put_domain(rdom);
+ rcu_unlock_domain(rdom);
if (!have_common_type(ste_ssidref, ste_rssidref)) {
spin_unlock(&d->grant_table->lock);
printkd("%s: Policy violation in grant table sharing domain %x -> domain %x.\n",
if (id1 == DOMID_SELF) id1 = current->domain->domain_id;
if (id2 == DOMID_SELF) id2 = current->domain->domain_id;
- subj = get_domain_by_id(id1);
- obj = get_domain_by_id(id2);
+ subj = rcu_lock_domain_by_id(id1);
+ obj = rcu_lock_domain_by_id(id2);
if ((subj == NULL) || (obj == NULL)) {
ret = ACM_ACCESS_DENIED;
goto out;
}
out:
if (obj != NULL)
- put_domain(obj);
+ rcu_unlock_domain(obj);
if (subj != NULL)
- put_domain(subj);
+ rcu_unlock_domain(subj);
return ret;
}
if (id == DOMID_SELF) id = current->domain->domain_id;
subj = current->domain;
- obj = get_domain_by_id(id);
+ obj = rcu_lock_domain_by_id(id);
if (obj == NULL) {
ret = ACM_ACCESS_DENIED;
goto out;
}
out:
if (obj != NULL)
- put_domain(obj);
+ rcu_unlock_domain(obj);
return ret;
}
}
atomic_inc(&ste_bin_pol.gt_eval_count);
subj = current->domain;
- obj = get_domain_by_id(id);
+ obj = rcu_lock_domain_by_id(id);
if (share_common_type(subj, obj)) {
cache_result(subj, obj);
ret = ACM_ACCESS_DENIED;
}
if (obj != NULL)
- put_domain(obj);
+ rcu_unlock_domain(obj);
return ret;
}
}
/* b) check types */
subj = current->domain;
- obj = get_domain_by_id(id);
+ obj = rcu_lock_domain_by_id(id);
if (share_common_type(subj, obj)) {
cache_result(subj, obj);
ret = ACM_ACCESS_DENIED;
}
if (obj != NULL)
- put_domain(obj);
+ rcu_unlock_domain(obj);
return ret;
}
{
struct domain *d;
ret = -ESRCH;
- d = get_domain_by_id(domctl->domain);
+ d = rcu_lock_domain_by_id(domctl->domain);
if ( d != NULL )
{
ret = paging_domctl(d,
&domctl->u.shadow_op,
guest_handle_cast(u_domctl, void));
- put_domain(d);
+ rcu_unlock_domain(d);
copy_to_guest(u_domctl, domctl, 1);
}
}
break;
ret = -ESRCH;
- if ( unlikely((d = get_domain_by_id(domctl->domain)) == NULL) )
+ if ( unlikely((d = rcu_lock_domain_by_id(domctl->domain)) == NULL) )
break;
if ( np == 0 )
else
ret = ioports_deny_access(d, fp, fp + np - 1);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
ret = -EINVAL;
if ( unlikely(!mfn_valid(mfn)) ||
- unlikely((d = get_domain_by_id(dom)) == NULL) )
+ unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
break;
page = mfn_to_page(mfn);
put_page(page);
}
- put_domain(d);
+ rcu_unlock_domain(d);
copy_to_guest(u_domctl, domctl, 1);
}
uint32_t *arr32;
ret = -ESRCH;
- if ( unlikely((d = get_domain_by_id(dom)) == NULL) )
+ if ( unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
break;
if ( unlikely(num > 1024) )
{
ret = -E2BIG;
- put_domain(d);
+ rcu_unlock_domain(d);
break;
}
free_xenheap_page(arr32);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
case XEN_DOMCTL_getmemlist:
{
int i;
- struct domain *d = get_domain_by_id(domctl->domain);
+ struct domain *d = rcu_lock_domain_by_id(domctl->domain);
unsigned long max_pfns = domctl->u.getmemlist.max_pfns;
uint64_t mfn;
struct list_head *list_ent;
domctl->u.getmemlist.num_pfns = i;
copy_to_guest(u_domctl, domctl, 1);
- put_domain(d);
+ rcu_unlock_domain(d);
}
}
break;
case XEN_DOMCTL_hypercall_init:
{
- struct domain *d = get_domain_by_id(domctl->domain);
+ struct domain *d = rcu_lock_domain_by_id(domctl->domain);
unsigned long gmfn = domctl->u.hypercall_init.gmfn;
unsigned long mfn;
void *hypercall_page;
if ( !mfn_valid(mfn) ||
!get_page_and_type(mfn_to_page(mfn), d, PGT_writable_page) )
{
- put_domain(d);
+ rcu_unlock_domain(d);
break;
}
put_page_and_type(mfn_to_page(mfn));
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
c.data = NULL;
ret = -ESRCH;
- if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
break;
ret = -EINVAL;
if ( c.data != NULL )
xfree(c.data);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
struct domain *d;
ret = -ESRCH;
- if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
break;
ret = -EINVAL;
if ( c.data != NULL )
xfree(c.data);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
struct domain *d;
ret = -ESRCH;
- if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
break;
switch ( domctl->u.address_size.size )
break;
}
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
struct domain *d;
ret = -ESRCH;
- if ( (d = get_domain_by_id(domctl->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL )
break;
domctl->u.address_size.size = BITS_PER_GUEST_LONG(d);
ret = 0;
- put_domain(d);
+ rcu_unlock_domain(d);
if ( copy_to_guest(u_domctl, domctl, 1) )
ret = -EFAULT;
if ( (op.domain > 0) || (op.bus > 0) || (op.device > 31) || (op.intx > 3) )
return -EINVAL;
- d = get_domain_by_id(op.domid);
+ d = rcu_lock_domain_by_id(op.domid);
if ( d == NULL )
return -ESRCH;
}
out:
- put_domain(d);
+ rcu_unlock_domain(d);
return rc;
}
if ( op.isa_irq > 15 )
return -EINVAL;
- d = get_domain_by_id(op.domid);
+ d = rcu_lock_domain_by_id(op.domid);
if ( d == NULL )
return -ESRCH;
}
out:
- put_domain(d);
+ rcu_unlock_domain(d);
return rc;
}
if ( (op.link > 3) || (op.isa_irq > 15) )
return -EINVAL;
- d = get_domain_by_id(op.domid);
+ d = rcu_lock_domain_by_id(op.domid);
if ( d == NULL )
return -ESRCH;
hvm_set_pci_link_route(d, op.link, op.isa_irq);
out:
- put_domain(d);
+ rcu_unlock_domain(d);
return rc;
}
}
else if ( IS_PRIV(current->domain) )
{
- d = get_domain_by_id(a.domid);
+ d = rcu_lock_domain_by_id(a.domid);
if ( d == NULL )
return -ESRCH;
}
}
param_fail:
- put_domain(d);
+ rcu_unlock_domain(d);
break;
}
}
else if ( !IS_PRIV(current->domain) )
return -EPERM;
- else if ( (d = get_domain_by_id(xatp.domid)) == NULL )
+ else if ( (d = rcu_lock_domain_by_id(xatp.domid)) == NULL )
return -ESRCH;
switch ( xatp.space )
if ( !paging_mode_translate(d) || (mfn == 0) )
{
- put_domain(d);
+ rcu_unlock_domain(d);
return -EINVAL;
}
UNLOCK_BIGLOCK(d);
- put_domain(d);
+ rcu_unlock_domain(d);
break;
}
}
else if ( !IS_PRIV(current->domain) )
return -EPERM;
- else if ( (d = get_domain_by_id(fmap.domid)) == NULL )
+ else if ( (d = rcu_lock_domain_by_id(fmap.domid)) == NULL )
return -ESRCH;
rc = copy_from_guest(&d->arch.e820[0], fmap.map.buffer,
fmap.map.nr_entries) ? -EFAULT : 0;
d->arch.nr_e820 = fmap.map.nr_entries;
- put_domain(d);
+ rcu_unlock_domain(d);
return rc;
}
ssidref = getssid.id.ssidref;
else if (getssid.get_ssid_by == ACM_GETBY_domainid)
{
- struct domain *subj = get_domain_by_id(getssid.id.domainid);
+ struct domain *subj = rcu_lock_domain_by_id(getssid.id.domainid);
if (!subj)
{
rc = -ESRCH; /* domain not found */
}
if (subj->ssid == NULL)
{
- put_domain(subj);
+ rcu_unlock_domain(subj);
rc = -ESRCH;
break;
}
ssidref = ((struct acm_ssid_domain *)(subj->ssid))->ssidref;
- put_domain(subj);
+ rcu_unlock_domain(subj);
}
else
{
ssidref1 = getdecision.id1.ssidref;
else if (getdecision.get_decision_by1 == ACM_GETBY_domainid)
{
- struct domain *subj = get_domain_by_id(getdecision.id1.domainid);
+ struct domain *subj = rcu_lock_domain_by_id(getdecision.id1.domainid);
if (!subj)
{
rc = -ESRCH; /* domain not found */
}
if (subj->ssid == NULL)
{
- put_domain(subj);
+ rcu_unlock_domain(subj);
rc = -ESRCH;
break;
}
ssidref1 = ((struct acm_ssid_domain *)(subj->ssid))->ssidref;
- put_domain(subj);
+ rcu_unlock_domain(subj);
}
else
{
ssidref2 = getdecision.id2.ssidref;
else if (getdecision.get_decision_by2 == ACM_GETBY_domainid)
{
- struct domain *subj = get_domain_by_id(getdecision.id2.domainid);
+ struct domain *subj = rcu_lock_domain_by_id(getdecision.id2.domainid);
if (!subj)
{
rc = -ESRCH; /* domain not found */
}
if (subj->ssid == NULL)
{
- put_domain(subj);
+ rcu_unlock_domain(subj);
rc = -ESRCH;
break;
}
ssidref2 = ((struct acm_ssid_domain *)(subj->ssid))->ssidref;
- put_domain(subj);
+ rcu_unlock_domain(subj);
}
else
{
if ( dom >= DOMID_FIRST_RESERVED )
return 0;
- if ( (d = get_domain_by_id(dom)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
return 1;
- put_domain(d);
+ rcu_unlock_domain(d);
return 0;
}
case XEN_DOMCTL_setvcpucontext:
{
- struct domain *d = get_domain_by_id(op->domain);
+ struct domain *d = rcu_lock_domain_by_id(op->domain);
vcpu_guest_context_u c = { .nat = NULL };
unsigned int vcpu = op->u.vcpucontext.vcpu;
struct vcpu *v;
svc_out:
xfree(c.nat);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
case XEN_DOMCTL_pausedomain:
{
- struct domain *d = get_domain_by_id(op->domain);
+ struct domain *d = rcu_lock_domain_by_id(op->domain);
ret = -ESRCH;
if ( d != NULL )
{
domain_pause_by_systemcontroller(d);
ret = 0;
}
- put_domain(d);
+ rcu_unlock_domain(d);
}
}
break;
case XEN_DOMCTL_unpausedomain:
{
- struct domain *d = get_domain_by_id(op->domain);
+ struct domain *d = rcu_lock_domain_by_id(op->domain);
ret = -ESRCH;
if ( d != NULL )
{
domain_unpause_by_systemcontroller(d);
ret = 0;
}
- put_domain(d);
+ rcu_unlock_domain(d);
}
}
break;
case XEN_DOMCTL_resumedomain:
{
- struct domain *d = get_domain_by_id(op->domain);
+ struct domain *d = rcu_lock_domain_by_id(op->domain);
struct vcpu *v;
ret = -ESRCH;
if ( test_and_clear_bit(_DOMF_shutdown, &d->domain_flags) )
for_each_vcpu ( d, v )
vcpu_wake(v);
- put_domain(d);
+ rcu_unlock_domain(d);
}
}
break;
break;
ret = -ESRCH;
- if ( (d = get_domain_by_id(op->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
break;
/* Needed, for example, to ensure writable p.t. state is synced. */
maxvcpu_out:
domain_unpause(d);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
case XEN_DOMCTL_destroydomain:
{
- struct domain *d = get_domain_by_id(op->domain);
+ struct domain *d = rcu_lock_domain_by_id(op->domain);
ret = -ESRCH;
if ( d != NULL )
{
domain_kill(d);
ret = 0;
}
- put_domain(d);
+ rcu_unlock_domain(d);
}
}
break;
case XEN_DOMCTL_getvcpuaffinity:
{
domid_t dom = op->domain;
- struct domain *d = get_domain_by_id(dom);
+ struct domain *d = rcu_lock_domain_by_id(dom);
struct vcpu *v;
cpumask_t new_affinity;
}
vcpuaffinity_out:
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
struct domain *d;
ret = -ESRCH;
- if ( (d = get_domain_by_id(op->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
break;
ret = sched_adjust(d, &op->u.scheduler_op);
if ( copy_to_guest(u_domctl, op, 1) )
ret = -EFAULT;
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
struct vcpu *v;
ret = -ESRCH;
- if ( (d = get_domain_by_id(op->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
break;
ret = -EINVAL;
getvcpucontext_out:
xfree(c.nat);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
struct vcpu_runstate_info runstate;
ret = -ESRCH;
- if ( (d = get_domain_by_id(op->domain)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
break;
ret = -EINVAL;
ret = -EFAULT;
getvcpuinfo_out:
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
unsigned long new_max;
ret = -ESRCH;
- d = get_domain_by_id(op->domain);
+ d = rcu_lock_domain_by_id(op->domain);
if ( d == NULL )
break;
}
spin_unlock(&d->page_alloc_lock);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
{
struct domain *d;
ret = -ESRCH;
- d = get_domain_by_id(op->domain);
+ d = rcu_lock_domain_by_id(op->domain);
if ( d != NULL )
{
memcpy(d->handle, op->u.setdomainhandle.handle,
sizeof(xen_domain_handle_t));
- put_domain(d);
+ rcu_unlock_domain(d);
ret = 0;
}
}
{
struct domain *d;
ret = -ESRCH;
- d = get_domain_by_id(op->domain);
+ d = rcu_lock_domain_by_id(op->domain);
if ( d != NULL )
{
if ( op->u.setdebugging.enable )
set_bit(_DOMF_debugging, &d->domain_flags);
else
clear_bit(_DOMF_debugging, &d->domain_flags);
- put_domain(d);
+ rcu_unlock_domain(d);
ret = 0;
}
}
break;
ret = -ESRCH;
- d = get_domain_by_id(op->domain);
+ d = rcu_lock_domain_by_id(op->domain);
if ( d == NULL )
break;
else
ret = irq_deny_access(d, pirq);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
break;
ret = -ESRCH;
- d = get_domain_by_id(op->domain);
+ d = rcu_lock_domain_by_id(op->domain);
if ( d == NULL )
break;
else
ret = iomem_deny_access(d, mfn, mfn + nr_mfns - 1);
- put_domain(d);
+ rcu_unlock_domain(d);
}
break;
struct domain *d;
ret = -ESRCH;
- d = get_domain_by_id(op->domain);
+ d = rcu_lock_domain_by_id(op->domain);
if ( d != NULL )
{
d->time_offset_seconds = op->u.settimeoffset.time_offset_seconds;
- put_domain(d);
+ rcu_unlock_domain(d);
ret = 0;
}
}
else if ( !IS_PRIV(current->domain) )
return -EPERM;
- if ( (d = get_domain_by_id(dom)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
return -ESRCH;
spin_lock(&d->evtchn_lock);
out:
spin_unlock(&d->evtchn_lock);
- put_domain(d);
+ rcu_unlock_domain(d);
return rc;
}
if ( rdom == DOMID_SELF )
rdom = current->domain->domain_id;
- if ( (rd = get_domain_by_id(rdom)) == NULL )
+ if ( (rd = rcu_lock_domain_by_id(rdom)) == NULL )
return -ESRCH;
/* Avoid deadlock by first acquiring lock of domain with smaller id. */
if ( ld != rd )
spin_unlock(&rd->evtchn_lock);
- put_domain(rd);
+ rcu_unlock_domain(rd);
return rc;
}
else if ( !IS_PRIV(current->domain) )
return -EPERM;
- if ( (d = get_domain_by_id(dom)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
return -ESRCH;
spin_lock(&d->evtchn_lock);
out:
spin_unlock(&d->evtchn_lock);
- put_domain(d);
+ rcu_unlock_domain(d);
return rc;
}
else if ( !IS_PRIV(current->domain) )
return -EPERM;
- if ( (d = get_domain_by_id(dom)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(dom)) == NULL )
return -ESRCH;
for ( i = 0; port_is_valid(d, i); i++ )
(void)__evtchn_close(d, i);
- put_domain(d);
+ rcu_unlock_domain(d);
return 0;
}
return;
}
- if ( unlikely((rd = get_domain_by_id(op->dom)) == NULL) )
+ if ( unlikely((rd = rcu_lock_domain_by_id(op->dom)) == NULL) )
{
- if ( rd != NULL )
- put_domain(rd);
gdprintk(XENLOG_INFO, "Could not find domain %d\n", op->dom);
op->status = GNTST_bad_domain;
return;
if ( unlikely((handle = get_maptrack_handle(ld->grant_table)) == -1) )
{
- put_domain(rd);
+ rcu_unlock_domain(rd);
gdprintk(XENLOG_INFO, "Failed to obtain maptrack handle.\n");
op->status = GNTST_no_device_space;
return;
op->handle = handle;
op->status = GNTST_okay;
- put_domain(rd);
+ rcu_unlock_domain(rd);
return;
undo_out:
spin_unlock(&rd->grant_table->lock);
op->status = rc;
put_maptrack_handle(ld->grant_table, handle);
- put_domain(rd);
+ rcu_unlock_domain(rd);
}
static long
ref = map->ref;
flags = map->flags;
- if ( unlikely((rd = get_domain_by_id(dom)) == NULL) )
+ if ( unlikely((rd = rcu_lock_domain_by_id(dom)) == NULL) )
{
/* This can happen when a grant is implicitly unmapped. */
gdprintk(XENLOG_INFO, "Could not find domain %d\n", dom);
unmap_out:
op->status = rc;
spin_unlock(&rd->grant_table->lock);
- put_domain(rd);
+ rcu_unlock_domain(rd);
}
static long
goto out;
}
- if ( unlikely((d = get_domain_by_id(dom)) == NULL) )
+ if ( unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
{
gdprintk(XENLOG_INFO, "Bad domid %d.\n", dom);
op.status = GNTST_bad_domain;
setup_unlock_out:
spin_unlock(&d->grant_table->lock);
- put_domain(d);
+ rcu_unlock_domain(d);
out:
if ( unlikely(copy_to_guest(uop, &op, 1)) )
goto query_out;
}
- if ( unlikely((d = get_domain_by_id(dom)) == NULL) )
+ if ( unlikely((d = rcu_lock_domain_by_id(dom)) == NULL) )
{
gdprintk(XENLOG_INFO, "Bad domid %d.\n", dom);
op.status = GNTST_bad_domain;
spin_unlock(&d->grant_table->lock);
- put_domain(d);
+ rcu_unlock_domain(d);
query_out:
if ( unlikely(copy_to_guest(uop, &op, 1)) )
}
/* Find the target domain. */
- if ( unlikely((e = get_domain_by_id(gop.domid)) == NULL) )
+ if ( unlikely((e = rcu_lock_domain_by_id(gop.domid)) == NULL) )
{
gdprintk(XENLOG_INFO, "gnttab_transfer: can't find domain %d\n",
gop.domid);
"or is dying (%lx)\n",
e->tot_pages, e->max_pages, gop.ref, e->domain_flags);
spin_unlock(&e->page_alloc_lock);
- put_domain(e);
+ rcu_unlock_domain(e);
page->count_info &= ~(PGC_count_mask|PGC_allocated);
free_domheap_page(page);
gop.status = GNTST_general_error;
spin_unlock(&e->grant_table->lock);
- put_domain(e);
+ rcu_unlock_domain(e);
gop.status = GNTST_okay;
sd = current->domain;
get_knownalive_domain(sd);
}
- else if ( (sd = get_domain_by_id(op->source.domid)) == NULL )
+ else if ( (sd = rcu_lock_domain_by_id(op->source.domid)) == NULL )
{
PIN_FAIL(error_out, GNTST_bad_domain,
"couldn't find %d\n", op->source.domid);
dd = current->domain;
get_knownalive_domain(dd);
}
- else if ( (dd = get_domain_by_id(op->dest.domid)) == NULL )
+ else if ( (dd = rcu_lock_domain_by_id(op->dest.domid)) == NULL )
{
PIN_FAIL(error_out, GNTST_bad_domain,
"couldn't find %d\n", op->dest.domid);
if ( have_d_grant )
__release_grant_for_copy(dd, op->dest.u.ref, 0);
if ( sd )
- put_domain(sd);
+ rcu_unlock_domain(sd);
if ( dd )
- put_domain(dd);
+ rcu_unlock_domain(dd);
op->status = rc;
}
"flags:(%x) dom:(%hu)\n",
handle, ref, map->flags, map->domid);
- rd = get_domain_by_id(map->domid);
+ rd = rcu_lock_domain_by_id(map->domid);
if ( rd == NULL )
{
/* Nothing to clear up... */
spin_unlock(&rd->grant_table->lock);
- put_domain(rd);
+ rcu_unlock_domain(rd);
map->flags = 0;
}
else if ( !IS_PRIV(current->domain) )
return -EPERM;
- if ( (d = get_domain_by_id(op.domid)) == NULL )
+ if ( (d = rcu_lock_domain_by_id(op.domid)) == NULL )
return -ESRCH;
if ( !shadow_mode_translate(d) )
{
- put_domain(d);
+ rcu_unlock_domain(d);
return -EINVAL;
}
{
if ( hypercall_preempt_check() )
{
- put_domain(d);
+ rcu_unlock_domain(d);
*progress = i;
return -EAGAIN;
}
if ( unlikely(__copy_from_guest_offset(&gpfn, op.gpfn_list, i, 1)) )
{
- put_domain(d);
+ rcu_unlock_domain(d);
return -EFAULT;
}
if ( unlikely(__copy_to_guest_offset(op.mfn_list, i, &mfn, 1)) )
{
- put_domain(d);
+ rcu_unlock_domain(d);
return -EFAULT;
}
}
- put_domain(d);
+ rcu_unlock_domain(d);
return 0;
}
if ( likely(reservation.domid == DOMID_SELF) )
d = current->domain;
else if ( !IS_PRIV(current->domain) ||
- ((d = get_domain_by_id(reservation.domid)) == NULL) )
+ ((d = rcu_lock_domain_by_id(reservation.domid)) == NULL) )
return start_extent;
args.domain = d;
}
if ( unlikely(reservation.domid != DOMID_SELF) )
- put_domain(d);
+ rcu_unlock_domain(d);
rc = args.nr_done;
d = current->domain;
else if ( !IS_PRIV(current->domain) )
return -EPERM;
- else if ( (d = get_domain_by_id(domid)) == NULL )
+ else if ( (d = rcu_lock_domain_by_id(domid)) == NULL )
return -ESRCH;
rc = (op == XENMEM_current_reservation) ? d->tot_pages : d->max_pages;
if ( unlikely(domid != DOMID_SELF) )
- put_domain(d);
+ rcu_unlock_domain(d);
break;
__func__);
return -EACCES;
}
- d = get_domain_by_id(op->domain);
+ d = rcu_lock_domain_by_id(op->domain);
if (d != NULL) {
*ssid = d->ssid; /* save for post destroy when d is gone */
if (*ssid == NULL) {
printk("%s: Warning. Destroying domain without ssid pointer.\n",
__func__);
- put_domain(d);
+ domain_rcu_lock(d);
return -EACCES;
}
d->ssid = NULL; /* make sure it's not used any more */
/* no policy-specific hook */
- put_domain(d);
+ domain_rcu_lock(d);
ret = 0;
}
break;